'\" te
.\" Copyright (c) 2004, Sun Microsystems, Inc. All Rights Reserved.
.\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License").  You may not use this file except in compliance with the License.
.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.  See the License for the specific language governing permissions and limitations under the License.
.\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
.TH LIBPICLTREE 3PICLTREE "September 12, 2020"
.SH NAME
libpicltree \- PTree and Plug-in Registration interface library
.SH SYNOPSIS
.nf
\fBcc\fR [\fIflag \&.\|.\|.\fR] \fIfile \fR\&.\|.\|. \fB-lpicltree\fR [\fIlibrary \&.\|.\|.\fR]
#include <picltree.h>
.fi

.SH DESCRIPTION
The PTree interface is the set of functions and data structures to access and
manipulate the PICL tree. The daemon and the plug-in modules use the PTree
interface.
.sp
.LP
The Plug-in Registration interface is used by the plug-in modules to register
themselves with the daemon.
.sp
.LP
The plug-in modules create the nodes and properties of the tree. At the time of
creating a property, the plug-ins specify the property information in the
\fBptree_propinfo_t\fR structure defined as:
.sp
.in +2
.nf
typedef struct {
    int             version;    /* version */
    picl_propinfo_t piclinfo;   /* info to clients */
    int             (*read)(ptree_rarg_t *arg, void *buf);
                                /* read access function for */
                                /* volatile prop */
    int             (*write)(ptree_warg_t *arg, const void *buf);
                                /* write access function for */
                                /* volatile prop */
} ptree_propinfo_t;
.fi
.in -2

.sp
.LP
See \fBlibpicl\fR(3PICL) for more information on PICL tree nodes and
properties.
.sp
.LP
The maximum size of a property value cannot exceed \fBPICL_PROPSIZE_MAX\fR.  It
is currently set to 512KB.
.SS "Volatile Properties"
In addition to \fBPICL_READ\fR and \fBPICL_WRITE\fR property access modes, the
plug-in modules specify whether a property is volatile or not by setting the
bit \fBPICL_VOLATILE\fR.
.sp
.in +2
.nf
#define   PICL_VOLATILE   0x4
.fi
.in -2

.sp
.LP
For a volatile property, the plug-in module provides the access functions to
read and/or write the property in the \fBptree_propinfo_t\fR argument passed
when creating the property.
.sp
.LP
The daemon invokes the access functions of volatile properties when clients
access their values. Two arguments are passed to the read access functions. The
first argument is a pointer to \fBptree_rarg_t\fR, which contains the handle of
the node, the handle of the accessed property and the credentials of the
caller. The second argument is a pointer to the  buffer where the value is to
be copied.
.sp
.in +2
.nf
typedef struct {
         picl_nodehdl_t nodeh;
         picl_prophdl_t proph;
         door_cred_t    cred;
} ptree_rarg_t;
.fi
.in -2

.sp
.LP
The prototype of the read access function for volatile property is:
.sp
.in +2
.nf
int read(ptree_rarg_t *rarg, void *buf);
.fi
.in -2

.sp
.LP
The read function returns \fBPICL_SUCCESS\fR to indicate successful completion.
.sp
.LP
Similarly, when a write access is performed on a volatile property, the daemon
invokes the write access function provided by the plug-in for that property and
passes it two arguments. The first argument is a pointer to \fBptree_warg_t\fR,
which contains the handle to the node, the handle of the accessed property and
the credentials of the caller. The second argument is a pointer to the buffer
containing the value to be written.
.sp
.in +2
.nf
typedef struct {
        picl_nodehdl_t  nodeh;
        picl_prophdl_t  proph;
        door_cred_t     cred;
} ptree_warg_t;
.fi
.in -2

.sp
.LP
The prototype of the write access function for volatile property is:
.sp
.in +2
.nf
int write(ptree_warg_t *warg, const void *buf);
.fi
.in -2

.sp
.LP
The write function returns \fBPICL_SUCCESS\fR to indicate successful
completion.
.sp
.LP
For all volatile properties, the 'size' of the property must be specified to be
the maximum possible size of the value. The maximum size of the value cannot
exceed \fBPICL_PROPSIZE_MAX\fR. This allows a client to allocate a sufficiently
large buffer before retrieving a volatile property's value.
.SS "Plug-in Modules"
Plug-in modules are shared objects that are located in well-known directories
for the daemon to locate and load them. Plug-in modules are located in one
of the following plug-in directories depending on the platform-specific nature
of the data they collect and publish.
.sp
.in +2
.nf
/usr/platform/picl/plugins/`uname -i`/
/usr/platform/picl/plugins/`uname -m`/
/usr/lib/picl/plugins/
.fi
.in -2

.sp
.LP
A plug-in module may specify its dependency on another plug-in module using the
\fB-l\fR linker option. The plug-ins are loaded by the PICL daemon using
\fBdlopen\fR(3C) according to the specified dependencies. Each plug-in module
must define a \fB\&.init\fR section, which is executed when the plug-in module
is loaded, to register themselves with the daemon. See
\fBpicld_plugin_register\fR(3PICLTREE) for more information on plug-in
registration.
.sp
.LP
The plug-in modules may use the \fBpicld_log\fR(3PICLTREE) function to log
their messages to the system log file.
.SH ATTRIBUTES
See \fBattributes\fR(7) for descriptions of the following attributes:
.sp

.sp
.TS
box;
c | c
l | l .
ATTRIBUTE TYPE	ATTRIBUTE VALUE
_
MT-Level	MT-Safe
.TE

.SH SEE ALSO
.BR libpicltree (3LIB),
.BR libpicl (3PICL),
.BR picld_log (3PICLTREE),
.BR picld_plugin_register (3PICLTREE),
.BR attributes (7)
